package cn.edu.sgu.www.mhxysy.service.chongwu;

import cn.edu.sgu.www.mhxysy.dto.chongwu.ChongwuSkillDTO;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuSkill;
import cn.edu.sgu.www.mhxysy.pager.chongwu.ChongwuSkillPager;
import cn.edu.sgu.www.mhxysy.vo.chongwu.ChongwuSkillVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface ChongwuSkillService {

	/**
	 * 宠物认证前的验证
	 * @param chongwuId 宠物ID
	 */
	void validate(String chongwuId);

	/**
	 * 取消法术认证
	 * @param chongwuId 宠物ID
	 * @return String 取消法术认证的技能名称
	 */
	@Transactional(rollbackFor = Exception.class)
	String cancelAuth(String chongwuId);

	/**
	 * 学习技能
	 * @param chongwuId 宠物ID
	 * @param skillId 宠物技能类型ID
	 * @return String 学习的新技能名称
	 */
	String study(String chongwuId, Integer skillId);

	/**
	 * 认证替换
	 * @param chongwuId 宠物ID
	 * @param skillId 宠物技能类型ID
	 */
	void replaceAuth(String chongwuId, Integer skillId);

	/**
	 * 技能认证
	 * @param location 技能位置
	 * @param chongwuId 宠物ID
	 */
	@Transactional(rollbackFor = Exception.class)
	void authenticate(Integer location, String chongwuId);

	/**
	 * 添加宠物技能
	 * @param chongwuSkillDTO 宠物技能信息
	 */
	void insert(ChongwuSkillDTO chongwuSkillDTO);

	/**
	 * 通过ID修改宠物技能
	 * @param chongwuSkillDTO 宠物技能信息
	 */
	void updateById(ChongwuSkillDTO chongwuSkillDTO);

	/**
	 * 获取宠物已经认证的技能
	 * @param chongwuId 宠物ID
	 * @return ChongwuSkill
	 */
	ChongwuSkill getAuthedSkill(String chongwuId);

	/**
	 * 查询宠物已学习的技能
	 * @param chongwuId 宠物ID
	 * @return List<ChongwuSkillVO>
	 */
	List<ChongwuSkillVO> getLearnedSkills(String chongwuId);

	/**
	 * 查询宠物可认证的技能
	 * @param chongwuId 宠物ID
	 * @return List<ChongwuSkill>
	 */
	List<ChongwuSkill> getCanAuthedSkills(String chongwuId);

	/**
	 * 分页查询宠物技能列表
	 * @param pager 分页参数
	 * @return Page<ChongwuSkill>
	 */
	Page<ChongwuSkill> selectByPage(ChongwuSkillPager pager);
}